package ArrayList扩容.动态数组;

/**
 * 实现动态数组-去解决数组的弊端
 */
public class DynamicArray {
    int[] ints = new int[5];
    //向数组中添加元素
    int index = 0;
    public void add(int num){//1
        //判断空间长度是否够用，如果不够就扩容
        //访问数组元素的索引大于合法索引,就扩容
        if(index > ints.length - 1){//0 > 4
            //扩容 调用扩容的方法
            arrayExpansion();
        }
        ints[index++] = num;  //ints[0] = 1    够用，不扩容
    }

    //数组扩容的方法
    private void arrayExpansion() {
        int[] bigger = new int[ints.length * 2];
        for(int i = 0 ; i < ints.length ; i++){
            bigger[i] = ints[i];//新的数组空间长度为10   里面有5个元素，有5个空的位置
        }
        ints = bigger;//把新的数组地址给旧的数组     旧的数组空间长度为10   里面有5个元素，有5个空的位置
        System.out.println("扩容后的数组空间长度："+ints.length);
    }
    //依据索引获取元素
    public void getElement(int index){//0
        if(index <= ints.length - 1){
            System.out.println(ints[index]);//ints[0]
        }
    }
    public void remove(int index1){//1 2 3 4 5        1 2(index=1) 3 4 5
        System.out.println("ints.length:"+ints.length);
        int index2 = 0;
        int[] newArray = new int[ints.length - 1];
        if(index1 <= ints.length - 1){
             for(int i = 0 ; i < ints.length ; i++){
                if(i != index1){
                    newArray[index2++] = ints[i];//1 3 4 5
                }
             }
        }
        ints = newArray;//1 2 3 4 5  1 3 4 5 地址赋值  OOP    把新的数组赋给原来的数组
    }
    //依据索引修改元素
    public void set(int index,int element){
        if(index <= ints.length - 1){
                ints[index] = element;
        }else{
            System.out.println("索引越界异常");
        }
    }
    //实现对数组元素的遍历
    public void printAllElements(){
        for(int i=0;i<ints.length;i++){
            System.out.println(ints[i]);
        }
    }

}
